package ch.elexis.core.ui.dialogs; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import javax.print.DocFlavor; import javax.print.PrintService; import javax.print.PrintServiceLookup; import javax.print.attribute.standard.Media; import javax.print.attribute.standard.MediaTray; import org.eclipse.jface.dialogs.TitleAreaDialog; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.ComboViewer; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import ch.elexis.core.ui.icons.Images; import ch.elexis.core.ui.util.SWTHelper; public class TextTemplatePrintSettingsDialog extends TitleAreaDialog { private ComboViewer cvPrinters, cvTrays; private List<PrintService> printServices; private List<MediaTray> mediaTrays; private String selPrinter, selTray; public TextTemplatePrintSettingsDialog(Shell parentShell, String printer, String tray){ super(parentShell); printServices = Arrays.asList(PrintServiceLookup.lookupPrintServices(null, null)); mediaTrays = new ArrayList<MediaTray>(); this.selPrinter = printer; this.selTray = tray; } @Override protected Control createDialogArea(Composite parent){ setTitle("Textvorlagen Druckeinstellungen"); setMessage("Bitte Drucker und Druckschacht für diese Vorlage definieren"); setTitleImage(Images.IMG_PRINTER_BIG.getImage()); Composite area = new Composite(parent, SWT.NONE); area.setLayout(new GridLayout(2, false)); area.setLayoutData(SWTHelper.getFillGridData(1, true, 1, true)); Label lblPrinter = new Label(area, SWT.NONE); lblPrinter.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1)); lblPrinter.setText("Drucker"); cvPrinters = new ComboViewer(area, SWT.READ_ONLY); Combo comboPrinters = cvPrinters.getCombo(); comboPrinters.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); cvPrinters.setContentProvider(ArrayContentProvider.getInstance()); cvPrinters.setLabelProvider(new LabelProvider() { @Override public String getText(Object element){ if (element instanceof PrintService) { PrintService ps = (PrintService) element; return ps.getName(); } return super.getText(element); } }); cvPrinters.setInput(printServices); cvPrinters.addSelectionChangedListener(new ISelectionChangedListener() { @Override public void selectionChanged(SelectionChangedEvent event){ IStructuredSelection selection = (IStructuredSelection) event.getSelection(); if (selection != null && !selection.isEmpty()) { PrintService printService = (PrintService) selection.getFirstElement(); loadAvailableTrays(printService); cvTrays.setInput(mediaTrays); cvTrays.refresh(); } } }); Label lblTray = new Label(area, SWT.NONE); lblTray.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1)); lblTray.setText("Schacht"); cvTrays = new ComboViewer(area, SWT.READ_ONLY); Combo comboTrays = cvTrays.getCombo(); comboTrays.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); cvTrays.setContentProvider(ArrayContentProvider.getInstance()); cvTrays.setLabelProvider(new LabelProvider() { @Override public String getText(Object element){ if (element instanceof MediaTray) { MediaTray mt = (MediaTray) element; return mt.toString(); } return super.getText(element); } }); cvTrays.setInput(mediaTrays); initSelection(); return area; } private void initSelection(){ if (selPrinter == null) { PrintService defaultPrintService = PrintServiceLookup.lookupDefaultPrintService(); if (defaultPrintService != null && printServices.contains(defaultPrintService)) { cvPrinters.setSelection(new StructuredSelection(defaultPrintService)); } } else { for (PrintService ps : printServices) { if (ps.getName().equals(selPrinter)) { cvPrinters.setSelection(new StructuredSelection(ps)); } } } if (!mediaTrays.isEmpty()) { if (selTray == null) { cvTrays.setSelection(new StructuredSelection(mediaTrays.get(0))); } else { for (MediaTray mt : mediaTrays) { if (mt.toString().equals(selTray)) { cvTrays.setSelection(new StructuredSelection(mt)); } } } } } private List<MediaTray> loadAvailableTrays(PrintService printService){ mediaTrays = new ArrayList<MediaTray>(); Object attributes = printService.getSupportedAttributeValues(Media.class, DocFlavor.SERVICE_FORMATTED.PRINTABLE, null); if (attributes != null && attributes.getClass().isArray()) { for (Media media : (Media[]) attributes) { if (media instanceof MediaTray) { mediaTrays.add((MediaTray) media); } } } return mediaTrays; } @Override protected void okPressed(){ IStructuredSelection selPrintService = (IStructuredSelection) cvPrinters.getSelection(); if (selPrintService != null && !selPrintService.isEmpty()) { selPrinter = ((PrintService) selPrintService.getFirstElement()).getName(); } IStructuredSelection selMediaTray = (IStructuredSelection) cvTrays.getSelection(); if (selMediaTray != null) { if (selMediaTray.isEmpty()) { selTray = ""; } else { selTray = ((MediaTray) selMediaTray.getFirstElement()).toString(); } } super.okPressed(); } public String getPrinter(){ return selPrinter; } public String getMediaTray(){ return selTray; } }